﻿//删除相邻数字的最大分数
//https://www.nowcoder.com/practice/3bcf72c738b6494bbe1ebe0ffde56152?tpId=230&tqId=40419&ru=/exam/oj

//#include <iostream>
//#include <vector>
//
//using namespace std;
//
//const int N = 1e4 + 10;
//
//int a[N];
//int n;
//vector<int> f(N);
//vector<int> g(N);
//
//int main()
//{
//	cin >> n;
//	int x;
//	for (int i = 0; i < n; i++)
//	{
//		cin >> x;
//		a[x] += x;
//	}
//
//	for (int i = 1; i < N; i++)
//	{
//		f[i] = g[i - 1] + a[i];
//		g[i] = max(f[i - 1], g[i - 1]);
//	}
//
//	cout << max(f[N - 1], g[N - 1]) << endl;
//	
//	return 0;
//}


//#include <iostream>
//#include <vector>
//
//using namespace std;
//
//int main()
//{
//	int x;
//	cin >> x;
//	int a = x;	
//	while (1)
//	{
//		double y = sqrt(x);
//		if (y - floor(y) == 0)
//		{
//			break;
//		}
//		x++;
//	}
//	int q = x;
//	int m = x - a;
//
//	x = a;
//	while (1)
//	{
//		double y = sqrt(x);
//		if (y - floor(y) == 0)
//		{
//			break;
//		}
//		x--;
//	}
//	int n = x - a;
//
//	if (m > n)
//	{
//		cout << x << endl;
//	}
//	else
//	{
//		cout << q << endl;
//	}
//
//	return 0;
//}

//#include <iostream>
//#include <math.h>
//
//using namespace std;
//
//
//int main()
//{
//	int x;
//	cin >> x;
//	int n = sqrt(x);
//	int a = n * n;
//	int b = (n + 1) * (n + 1);
//
//	if ((b - x) > (x - a))
//	{
//		cout << a << endl;
//	}
//	else
//	{
//		cout << b << endl;
//	}
//
//	return 0;
//}


//#include <iostream>
//#include <vector>
//#include <queue>
//using namespace std;
//const int N = 2e5 + 10;
//vector<vector<int>> edges(N); // edges[i] 表⽰ i 这个点所连接的边的信息
//int in[N]; // 统计⼊度信息
//int n, m;
//queue<int> q;
//vector<int> ret; // 记录最终结果
//int main()
//{
//	cin >> n >> m;
//	while (m--)
//	{
//		int a, b;
//		cin >> a >> b;
//		edges[a].push_back(b); // 存储边的信息
//		in[b]++; // 存储⼊度
//	}
//	for (int i = 1; i <= n; i++) // 把⼊度为 0 的点放进队列中
//	{
//		if (in[i] == 0)
//		{
//			q.push(i);
//		}
//	}
//	while (q.size())
//	{
//		int a = q.front();
//		q.pop();
//		ret.push_back(a);
//		for (auto b : edges[a])
//		{
//			if (--in[b] == 0)
//			{
//				q.push(b);
//			}
//		}
//	}
//	// 判断
//	if (ret.size() == n)
//	{
//		for (int i = 0; i < n - 1; i++)
//		{
//			cout << ret[i] << " ";
//		}
//		cout << ret[n - 1]; // 测评会考虑最后⼀个元素的空格
//	}
//	else
//	{
//		cout << -1 << endl;
//	}
//	return 0;
//}


//【模板】拓扑排序（拓扑排序）【模板】拓扑排序（拓扑排序）
// https://www.nowcoder.com/practice/88f7e156ca7d43a1a535f619cd3f495c?tpId=308&tqId=40470&ru=/exam/oj
//#include <iostream>
//#include <vector>
//#include <queue>
//
//using namespace std;
//
//const int N = 2e5 + 10;
//
//vector<vector<int>> edges(N);
//int in[N];
//
//int n, m;
//queue<int> q;
//vector<int> ret;
//
//int main()
//{
//	cin >> n >> m;
//	while (m--)
//	{
//		int a, b;
//		cin >> a >> b;
//		edges[a].push_back(b);
//		in[b]++;
//	}
//
//	for (int i = 1; i <= n; i++)
//	{
//		if(in[i] == 0)
//		{
//			q.push(i);
//		}
//	}
//
//	while (q.size())
//	{
//		int a = q.front(); q.pop();
//		ret.push_back(a);
//
//		for (auto& b : edges[a])
//		{
//			in[b]--;
//			if (in[b] == 0)
//			{
//				q.push(b);
//			}
//		}
//	}
//
//			if (ret.size() == n)
//		{
//			for (int i = 0; i < n - 1; i++)
//			{
//				cout << ret[i] << " ";
//			}
//			cout << ret[n - 1];
//		}
//		else
//		{
//			cout << -1 << endl;
//		}
//
//	return 0;
//}

//#include <unordered_map>
//#include <queue>
//#include <iostream>
//
//using namespace std;
//
//class Solution
//{
//public:
//    bool canFinish(int n, vector<vector<int>>& prerequisites)
//    {
//        unordered_map<int, vector<int>> mp;
//        int in[2005] = { 0 };
//        queue < int> q;
//        //vector<int> ret;
//
//        int x = prerequisites.size();
//        for (int i = 0; i < x; i++)
//        {
//            mp[prerequisites[i][1]].push_back(prerequisites[i][0]);
//            in[prerequisites[i][0]]++;
//        }
//
//        for (int i = 0; i < n; i++)
//        {
//            if (in[i] == 0) q.push(i);
//        }
//
//        while (q.size())
//        {
//            auto f = q.front(); q.pop();
//            //ret.push_back(f);
//
//            for (auto& e : mp[f])
//            {
//                in[e]--;
//                if (in[e] == 0)
//                {
//                    q.push(e);
//                }
//            }
//        }
//
//        for (int i : in)
//            if (i)
//                return false;
//        return true;
//
//    }
//};

//#include <iostream>
//#include <vector>
//
//using namespace std;
//
//class StringFormat
//{
//public:
//    string formatString(string A, int n, vector<char> arg, int m)
//    {
//        string s1;
//        int j = 0;
//        for (int i = 0; i < n; i++)
//        {
//            if (A[i] != '%')
//            {
//                s1 += A[i];
//            }
//            else
//            {
//                s1 += arg[j];
//                j++;
//                i++;
//            }
//        }
//
//        for (; j < m; j++)
//        {
//            s1 += arg[j];
//        }
//
//        return s1;
//    }
//};

//神奇数
//https://www.nowcoder.com/questionTerminal/99fa7be28d5f4a9d9aa3c98a6a5b559a
//#include <iostream>
//#include <cmath>
//#include <vector>
//using namespace std;
//int a, b;
//bool isprim(int n) // 判断是否是质数
//{
//	if (n < 2) return false;
//
//	for (int i = 2; i <= sqrt(n); i++) // 试除法
//	{
//		if (n % i == 0) return false;
//	}
//	return true;
//}
//int check(int n) // 判断是否是神奇数
//{
//	vector<int> num;
//	while (n)
//	{
//		num.push_back(n % 10);
//		n /= 10;
//	}
//
//	for (int i = 0; i < num.size(); i++) // 枚举⼗位数
//	{
//		for (int j = 0; j < num.size(); j++) // 枚举个位数
//		{
//			if (i != j && num[i] != 0)
//			{
//				if (isprim(num[i] * 10 + num[j]))
//				{
//					return 1;
//				}
//			}
//		}
//	}
//
//	return 0;
//}
//int main()
//{
//	cin >> a >> b;
//	int ret = 0;
//
//	for (int i = a; i <= b; i++)
//	{
//		ret += check(i);
//	}
//
//	cout << ret << endl;
//
//	return 0;
//}

//#include <iostream>
//#include <cmath>
//#include <vector>
//
//using namespace std;
//
//bool is_prime(int x)
//{
//	for (int i = 2; i < sqrt(x); i++)
//	{
//		if (x % i == 0)
//			return false;
//	}
//
//	return true;
//}
//
//int check(int n)
//{
//	vector<int> num;
//	while (n)
//	{
//		num.push_back(n % 10);
//		n /= 10;
//	}
//
//	for (int i = 0; i < num.size(); i++)
//	{
//		for (int j = 0; j < num.size(); j++)
//		{
//			if (i != j && num[i] != 0)
//			{
//				if (is_prime(num[i] * 10 + num[j]))
//				{
//					return 1;
//				}
//			}
//			
//		}
//	}
//
//	return 0;
//}
//
//int main()
//{
//	int n, m;
//	cin >> n >> m;
//
//	int ret = 0;
//	for (int i = max(n, 10); i <= m; i++)
//	{
//		ret += check(i);
//	}
//
//	cout << ret << endl;
//
//	return 0;
//}

//DNA序列
//https://www.nowcoder.com/practice/e8480ed7501640709354db1cc4ffd42a?tpId=37&tqId=21286&ru=/exam/oj
#include <iostream>
#include <string>

using namespace std;

int main()
{
	string s1;
	int n;
	cin >> s1 >> n;

	int begin = -1;
	int count_win = 0;
	int count_max = 0;

	int left = 0;
	int right = 0;
	while (right < s1.size())
	{
		if (s1[right] == 'C' || s1[right] == 'G')
		{
			count_win++;
		}

		while (right + 1 - left > n)
		{
			if (s1[left] == 'C' || s1[left] == 'G')
			{
				count_win--;
			}
			left++;
		}

		if (right + 1 - left == n)
		{
			if (count_max < count_win)
			{
				begin = left;
				count_max = count_win;
			}
		}

		right++;
	}

	for (int i = begin; i < begin + n; i++)
	{
		cout << s1[i];
	}

	return 0;
}